fn main() {
    let s = String::from("hello");   // s 进入作用域
    takes_ownership(s);         // s 的值移动到函数里
    // println!("{}", s);                    // String类型是非Copy类型，所以到这一行，s不再有效
    
    let x = 5;                         // x 进入作用域
    makes_copy(x);             // x 应该移动函数里，但i32是Copy类型，所以在后面可继续使用x
    println!("Copy {}", x); 
} // 这里，x 先移出了作用域，然后是s。但因为s 的值已被移走，
  // 没有特殊之处

fn takes_ownership(some_string: String) { // some_string 进入作用域
    println!("takes {}", some_string);
} // 这里，some_string 移出作用域并调用`drop` 方法。
  // 占用的内存被释放

fn makes_copy(some_integer: i32) { // some_integer 进入作用域
    println!("make {}", some_integer);
} // 这里，some_integer 移出作用域。没有特殊之处